package com.zgscwjm.taobaphelper.b;

import android.content.Context;

import com.zgscwjm.taobaphelper.auto.updateCookie;
import com.zgscwjm.taobaphelper.exutils.LsfbLog;
import com.zgscwjm.taobaphelper.xp.DSLogger;

import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;

import java.io.DataOutputStream;
import java.io.File;
import java.io.InputStream;

/**
 * Created by zgscwjm on 17-3-6.
 */
// FIXME: 17-3-7 这个类的名字要改
public class a {

    public static boolean a=true;
    public static String b = "utf-8";
    static Boolean c = null;
    public static String a(File file,String str){
        DSLogger.info(String.format(" mkdir [%s] with name [%s]"),new Object[]{file.getAbsolutePath(),str},new Object[0]);
        DSLogger.info("mkdri res:"+c(String.format("mkdir -p %s",new Object[]{file.getAbsolutePath()})),new Object[0]);
        return chowm(str,file.getAbsolutePath());
    }

    /**
     * 应该是个追加输出命令
     * @param str
     * @param str2
     * @return
     */
    public static String a(String str,String str2){
        return c(" echo '"+str2+" ' >" +str);
    }

    /**
     * 改变所有者 和 所有组群 对应原来的a s
     * @param owner
     * @param group
     * @param file
     * @return
     */
    public static String chown(String owner,String group,String file){
        if (a){
            return c(String.format(" busybox chown -R %s:%s %s",new Object[]{owner,group,file}));
        }
        return c(String.format(" chown %s:%s %s",new Object[]{owner,group,file}));
    }

    /**
     * 重启 对应原来的a
     */
    public static void reboot() {
        c("reboot");
        c("busybox reboot");
    }

    /** // FIXME: 17-3-7 这里应该是替换 手机唯一识别码的方法
     * 看这个样子 应该是替换 手机唯一识别码
     * @param context
     * @param str
     */
    public static void a(Context context,String str){
        LsfbLog.e(str," start to uninstall taobao");
        String b = DSReceiver.b(context);
        runSh("/data/local/tmp/tb_uninstall.sh");
        updateCookie.sleep7000();
        LsfbLog.e(str," start to open 008");
        runSh("/data/local/tmp/open_008.sh");
        updateCookie.sleep7000();
        LsfbLog.e(str," start to view 008");
        updateCookie.sleep10000();
        updateCookie.sleep10000();;
        updateCookie.sleep10000();
        String b2 = DSReceiver.b(context);
        //IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写，国际移动装备辨识码，是由15位数字组成的"电子串号"，它与每台移动电话机一一对应，而且该码是全世界唯一的。
        LsfbLog.e(str, String.format("oldimei[%s]-new[%s]",new Object[]{b,b2}));
    }

    /**
     * 运行脚本 对应原来的 a方法
     * @param fileName
     */
    public static void runSh(String fileName) {
        File file = new File(fileName);
        if (!file.canExecute()) {
            file.setExecutable(true);
        }
        c("/system/bin/sh  " + fileName + " \n");
    }

    /**
     * cat 命令 读取文件 对应原来b
     * @param file 文件路径 文件名
     * @return
     */
    public static String cat(String file){
        return c(" cat "+file);
    }

    /**
     * chmod 对应原来的 myCookie   //时间：2017/3/13 伏仲  这个方法是对应以前的b方法。
     * @param mode
     * @param file
     * @return
     */
    public static String chmod(String mode, String file) {
        return c(" chmod  " + file + "  " + mode);
    }

    // TODO: 17-3-7 这个应该是用ls来查询 然后返回结果集 对应原来的b
    public static String b(String str,String str2,String str3){
        String shresult = c(String.format(str3,new Object[]{str,str2}));
        if (org.apache.commons.lang3.StringUtils.isBlank(shresult)){
            DSLogger.info(" no ls res for file :" + str + " with nextfile:" + str2, new Object[0]);
            return null;
        }
        DSLogger.info(" found file ls res :" + str + " with content ::" + shresult, new Object[0]);
        Object[] split = shresult.replaceAll("\\t", " ").replaceAll(" +", " ").split(" ");
        //把结果集 用,链接起来 输出
        DSLogger.info(" split res :" + org.apache.commons.lang3.StringUtils.join(split,','), new Object[0]);
        return String.valueOf(split[1]);
    }

    /**
     * 判断是否有hasAutoRunner 对应原来的b
     * @return
     */
    public static boolean hasAutoRunner(){
        String shresult = c(" ps | grep AutoRunner.jar");
        return shresult != null && shresult.contains("AutoRuner");
    }

    /**
     * 安装淘宝
     * 对应原来的c
     * @return
     */
    public static String installTaobao(){
        return c(" pm install /data/local/tmp/taobao.apk");
    }


    /**
     * 执行 命令 commend
     * @param str
     * @return
     */
    public static String c(String str){
        Process exec = null;
        DSLogger.info(" exec cmd : " + str,new Object[0]);
        try{
            exec = Runtime.getRuntime().exec("su");

                DataOutputStream dataOutputStream = new DataOutputStream(exec.getOutputStream());
                dataOutputStream.writeBytes(" "+ str +" ");
                dataOutputStream.writeBytes("\nexit\n");
                dataOutputStream.flush();
                exec.waitFor();
                String iOUtils = IOUtils.toString(exec.getInputStream(), Charsets.UTF_8);
                DSLogger.info(" exec res :"+ iOUtils,new Object[0]);
                if (exec == null) {
                    return iOUtils;
                }
                    exec.exitValue();
                    return iOUtils;
        }catch (Exception ex){
             exec.destroy();
             return null;
        }

    }


    /**
     * 复制文件 从file1 复制到file2,对应原来的c发方法
     * @param file1
     * @param file2
     * @return
     */
    public static String copy(String file1,String file2){
        return c(String.format(" cp -r %s %s",new Object[]{file1,file2}));
    }

    /**
     * 删除淘宝
     * 对应原来的 d 方法
     * @return
     */
    public static String deletTaobao(){
        return c(" pm uninstall -k com.taobao.taobao");
    }


    public static String d(String str){
        Process exec = null;
        String str2 = null;
        DSLogger.info(" exec cmd :"+str,new Object[0]);
        try{
            exec = Runtime.getRuntime().exec("su");
            DataOutputStream dataOutputStream = new DataOutputStream(exec.getOutputStream());
            dataOutputStream.writeBytes(" "+str+" ");
            dataOutputStream.writeBytes("\nexit\n");
            dataOutputStream.flush();
            InputStream inputStream = exec.getInputStream();
            InputStream errorStream = exec.getErrorStream();
            // TODO: 17-3-7 这里的b对应的是本包/b类
            new b(inputStream).start();
            // TODO: 17-3-7 这里对应的是本包/c类
            new c(errorStream).start();
            exec.waitFor();
            str2 = IOUtils.toString(exec.getInputStream(),Charsets.UTF_8);
            if (exec!=null){
                exec.exitValue();
            }
        }catch (Exception e){
            if (exec != null) {
                exec.destroy();
            }
        }
        return str2;
    }

    /**
     * 改变文件的所有者 对应原来的 d
     * @param own
     * @param fileName
     * @return
     */
    public static String chowm(String own,String fileName){
        if (a){
            return c(String.format(" busybox chown -R %s:%s %s",new Object[]{own,own,fileName}));
        }
        return c(String.format(" chown %s:%s %s",new Object[]{own,own,fileName}));
    }

    /**
     * 删除zirco zirco貌似是个浏览器 对应原来的e
     * @return
     */
    public static String delzirco() {
        return c(" pm uninstall -k org.zirco");
    }

    /**
     * 创建文件夹 对应原来的e
     * @param path
     * @return
     */
    public static String mkdir(String path) {
        return c(String.format(" mkdir -p %s ", new Object[]{path}));
    }

    /**
     * ls 来查询 并 grep 来过滤 对应原e
     * @param str
     * @param str2
     * @return
     */
    public static String ls(String str, String str2) {
        return b(str, str2, " ls -nl %s | grep %s");
    }

    /**
     * remove 掉文件 ,对应原f
     * @param str
     * @return
     */
    public static String remove(String str) {
        return c(String.format(" rm -r %s ", new Object[]{str}));
    }

    /**
     * // todo 暂时看不懂
     * @param str
     * @param str2
     * @return
     */
    public static String f(String str, String str2) {
        return b(str, str2, " ls -al %s | grep %s");
    }

    /**
     * 输出 str 对应原 g
     * @param str
     * @return
     */
    public static String echo(String str) {
        return c("echo '" + str + "'");
    }

    /**
     * 对应原来的h --- 和 e方法一样
     * @param str
     * @return
     */
    public static String mkdir2(String str) {
        return c(String.format("mkdir -p  %s", new Object[]{str}));
    }

    /**
     * 对应原来的i方法
     * @param str
     * @return
     */
    public static boolean hasfile(String str) {
        String shresult = c(String.format(" ls -al %s", new Object[]{str}));
        DSLogger.infos(" ls res [%s], for file [%s]", c, str);
        return (org.apache.commons.lang3.StringUtils.isBlank(shresult) || shresult.contains("No such file or directory ")) ? false : true;
    }


}
